package com.example.demo.controller;

import org.springframework.web.bind.annotation.*;

import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;

@RestController
@RequestMapping("/sa-token-test")
@Tag(name = "sa-token组件测试", description = "sa-token组件相关功能")
public class SaTokenTestController {

    @GetMapping("doLogin")
    @Parameter(name = "username", description = "账号", example = "zhang")
    @Parameter(name = "password", description = "密码", example = "123456")
    @Operation(summary = "登录", description = "账号: zhang 密码: 123456")
    public SaResult doLogin(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if ("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001, new SaLoginModel()
                    .setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
                    .setIsLastingCookie(true) // 是否为持久Cookie（临时Cookie在浏览器关闭时会自动删除，持久Cookie在重新打开后依然存在）
                    .setTimeout(60 * 60 * 24 * 7) // 指定此次登录token的有效期, 单位:秒 （如未指定，自动取全局配置的 timeout 值）
                    .setIsWriteHeader(false));
            return SaResult.ok("登录成功：" + StpUtil.getTokenInfo());
        }
        return SaResult.error("登录失败");
    }

    // 查询登录状态
    @GetMapping("isLogin")
    @Operation(summary = "查询登录状态")
    public String isLogin() {
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

    // 查询登录状态
    @GetMapping("logout")
    @Operation(summary = "退出")
    public SaResult logout() {
        StpUtil.logout();
        return SaResult.ok();
    }
}
